<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../vue/vue.js"></script>
</head>
<body>
<!--
   计算属性   VS   侦听器
   虽然计算属性在大多数情况下更合适，但有时也需要一个自定义的侦听器。
   侦听器在数据变化时执行异步或开销较大的操作时，这个方式是最有用的

   1. 计算属性多用于data属性值的运算   已确定的值
   2. watch多用与属性值改变的监听 同时作出异步请求操作


-->
<div id="app">
    <p>first name :<input type="text" placeholder="first name" v-model="firstName"></p>
    <p>last name :<input type="text" placeholder="last name" v-model="lastName"></p>
    <p>computed full name :{{fullName}}</p>
    <p>watch Fname:{{fName}}</p>
</div>

<script>
    let vm = new Vue({
        el: '#app',
        data: {
            firstName: 'zhang',
            lastName: 'san',
            fName: ''
        },
        methods: {},
        computed: {
            fullName: function () {
                //  参与运算的属性 会自动被监视  一旦改变会重新计算
                return this.firstName + this.lastName
            }
        },
        //    侦听器  监听data中属性值的改变  回调函数会默认传递两个参数 参数1  新值 参数2 原始值
        watch: {
            firstName: function (val) {
                console.log('firstName 改变了', val)
                this.fName = val + this.lastName
            },
            lastName: function (val, old) {
                console.log('lastName 改变了', val, old)
                this.fName = this.firstName + val
            }
        }
    })
</script>

</body>
</html>
